import pymysql
import  time
def mydb(text):
    """

    :param text: 传入sql语句
    :return: 返回查询结果，如果执行不是查询语句，返回()
    """
    # 1、用户系统 数据存入数据库
    db = pymysql.connect(
        user='test',  # 用户名
        password='test123',  # 密码
        host='192.168.0.125',  # 数据库ip
        port=3306,  # 数据库端口
        database="userinfo",  # 数据库名称
        charset='utf8mb4')  # 字符编码
    # 建立游标 (游标的作用：执行SQL语句，获取查询结果)
    cs = db.cursor()
    # 2、通过 游标 执行SQL
    cs.execute(text)
    # 3、获取查询的结果，如果执行的不是 查询语句，返回（）
    data = cs.fetchall()  # 以元组方式返回查询结果 ， ((第一条数据),(第二条数据)  )
    # 4、对数据进行了 增删改 需要 commit 提交 或者 rollback 撤销、回滚
    db.commit()
    # 关闭连接
    db.close()
    return data

# 2、用户id自动生成，唯一
def make_userid():
    uid = int(time.time() * 10000000)
    return uid

# 密码要求(新增、修改)
# 1、长度超过8位
# 2、包括大小写、字母、数字、其他，以上四种至少三种
def check_pwd(pwd):
    """
    :param pwd:传入密码，检查是否符合要求
    :return:  符合要求返回True，否则返回False
    """
    if len(pwd) <= 8:
        return False
    else:
        a = b = c = d = 0
        for i in pwd:
            if i.isdigit():
                a = 1
            elif i.isupper():
                b = 1
            elif i.islower():
                c = 1
            else:
                d = 1
        if a + b + c + d < 3:
            return False
        else:
            return True

def have_user(usr):
    """

    :param usr:
    :return: 存在用户返回True，不存在返回False
    """
    if 6 <= len(usr) <= 20:
        # 前提
        data = mydb(text=f"select * from user where uname = '{usr}'")
        if len(data) ==0:
            return False
        else:
            return True
    else:
        return False

msg = """欢迎来到用户系统，请输入您的操作指令
0 >>> 退出
1 >>> 注册
2 >>> 登录
3 >>> 修改密码
4 >>> 删除用户"""
print(msg)

while True:
    flag = input('请输入指令')
    if flag == '0':
        break
    elif flag == '1':
        username = input('请输入用户名：')
        # 判断用户名是否合法，不合法则结束
        if not have_user(usr=username):
            password = input('请输入密码')
            if check_pwd(pwd=password):
                uid = make_userid()
                mydb(f"insert into user values ({uid},'{username}','{password}')")
            else:
                print('密码不合法')
        else:
            print('用户名有误或已存在')
    elif flag == '2':
        # 输入用户名
        username = input('请输入用户名')
        # 判断是否存在
        data = mydb(text=f"select * from user where uname = '{username}';")
        if len(data) == 0:
            print('用户尚未注册')
        else:
            password = input('请输入密码')
            # 查询数据库中存储的密码
            db_password = mydb(f"select upassword from user where uname = '{username}';")
            if password == db_password[0][0]: # (('admin123.',),) (1,)
                print('登录成功')
            else:
                print('用户名或密码错误')
    elif flag == '3':
        username1 = input('请输入用户名')
        data = mydb(text=f"select uname from user where uname = '{username1}'")
        if len(data) == 0:
            print('用户名未注册，无法修改')
        else:
            password1 = input('请输入旧密码')
            data = mydb(text=f"select upassword from user where uname='{username1}';")
            data = str(data[0][0])
            if password1 == data:
                password = input('请输入新密码')
                if check_pwd(pwd=password):
                    mydb(text=f"update user set upassword='{password}' where uname='{username1}';")
                    print('修改成功')
                elif password == password1:
                    print('新密码与旧密码一致')
                else:
                    print('密码不合法')
            else:
                print('密码错误')
    elif flag == '4':
        username = input("请输入用户名")
        data = mydb(text=f"select uname from user where uname='{username}';")
        if len(data) == 0:
            print('此用户未注册，无法删除')
        else:
            password = input('请输入密码')
            data = mydb(text=f"select upassword from user where uname='{username}';")
            data = str(data[0][0])
            if password == data:
                mydb(text=f"delete from user where uname='{username}';")
                print('删除成功')
            else:
                print('密码错误')
    else:
        print('输入的指令有误')

